<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>面试题 01.08. 零矩阵</title>
  </head>
  <body>
    <script>
      //     编写一种算法，若M × N矩阵中某个元素为0，则将其所在的行与列清零。

      //

      // 示例 1：

      // 输入：
      // [
      //   [1,1,1],
      //   [1,0,1],
      //   [1,1,1]
      // ]
      // 输出：
      // [
      //   [1,0,1],
      //   [0,0,0],
      //   [1,0,1]
      // ]
      // 示例 2：

      // 输入：
      // [
      //   [0,1,2,0],
      //   [3,4,5,2],
      //   [1,3,1,5]
      // ]
      // 输出：
      // [
      //   [0,0,0,0],
      //   [0,4,5,0],
      //   [0,3,1,0]
      // ]

      // 来源：力扣（LeetCode）
      // 链接：https://leetcode.cn/problems/zero-matrix-lcci
      // 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

      /**
       * @param {number[][]} matrix
       * @return {void} Do not return anything, modify matrix in-place instead.
       */
      var setZeroes = function (matrix) {
        const rowIndex = new Set()
        const colIndex = new Set()
        matrix.forEach((itemList, rowI) => {
          itemList.forEach((item, colI) => {
            if (item === 0) {
              rowIndex.add(rowI)
              colIndex.add(colI)
            }
          })
        })

        for (let i = 0; i < matrix.length; i++) {
          if (rowIndex.has(i)) {
            matrix[i] = new Array(matrix[i].length).fill(0)
            continue
          }
          for (let j = 0; j < matrix[i].length; j++) {
            if (colIndex.has(j)) {
              matrix[i][j] = 0
            }
          }
        }
      }

      let arr = [
        [1, 1, 1],
        [1, 0, 1],
        [1, 1, 1],
      ]
      setZeroes(arr)
      console.log(arr)
    </script>
  </body>
</html>
